#include "ConexionBidireccional.h"

ConexionBidireccional::ConexionBidireccional(std::string host,SocketProtocoloPlano* socket,ColaMensajes* mensajes,const bool* conexionActiva){
	this->host = host;
	this->socket = socket;
	this->mensajes = mensajes;
	this->conectado = conexionActiva;

	this->sender =  new Sender(socket,mensajes,conectado);
	this->recever =  new Recever(socket,mensajes,conectado);
}

ConexionBidireccional::ConexionBidireccional(std::string host,SocketProtocoloPlano* socket,unsigned int listenPort,unsigned int broadcastPort,ColaMensajes* colaRecibir,ColaMensajes* colaEnviar,const bool* conexionActiva){
	this->sender =  new Sender(broadcastPort,host,colaEnviar,conectado);
	this->recever =  new Recever(listenPort,host,colaRecibir,conectado);

	this->sender->start();
	this->recever->start();
}

ConexionBidireccional::ConexionBidireccional(SocketProtocoloPlano* socket,unsigned int listenPort,unsigned int broadcastPort,ColaMensajes* colaRecibir,ColaMensajes* colaEnviar,const bool* conexionActiva){
	this->sender =  new Sender(broadcastPort,colaEnviar,conectado);
	this->recever =  new Recever(listenPort,colaRecibir,conectado);

	this->sender->start();
	this->recever->start();
}

int ConexionBidireccional::terminar(){
	//Cierro el socket
	socket->shutdown();
	return socket->close();
}

void ConexionBidireccional::join(){
	this->recever->join();
	this->sender->join();
}

int ConexionBidireccional::enviar(DTO* dto){
	return this->sender->enviar(dto);
}

DTO* ConexionBidireccional::recibir(){
	return this->recever->recibir();
}

//No cerrar el socket.
ConexionBidireccional::~ConexionBidireccional(){

}
